package Calcule;

import java.util.HashMap;
import java.util.Map;
/**
 * Implemente le Objet MemoireCache pour faire la gestion
 * du Algorithm "Solution recursive avec memoire cache".
 * @author Manuel
 * @authos Marcos
 */
public class MemoireCache {
	
	/**
	 * Le Collection pour stocker des aires deja calculees
	 * utilisees dans le methode Rebouchage.rebouchageTrouRecCache() 
	 */
	private Map<String,Double> map; //<Param(distances entre les 3 points),Valeur de l'Aire>
	/** Le nombre de sommets */
	private int n;
	/**
	 * Constructeur avec la valeur n
	 * -Initialiser la liste
	 * @param n nombre de sommets
	 */
	public MemoireCache(int n){
		map = new HashMap<String,Double>();
		this.n=n;
	}
	/**
	 * Stocker la valeur de l'aire avec la cle <a,b,c>
	 * @param a semi Cle
	 * @param b semi Cle
	 * @param c semi Cle
	 * @param aire aire stockee
	 */
	public void setCache(int a, int b, int c, double aire){
		map.put(a+" "+b+" "+c, aire);
	}
	/**
	 * Prendre la valeur de l'aire appartenant a la cle <a,b,c>
	 * @param a semi Cle
	 * @param b semi Cle
	 * @param c semi Cle
	 * @return aire
	 */
	public Double getCache(int a, int b, int c){
		return map.get(a+" "+b+" "+c);
	}
	/**
	 * Verifier si l'aire appartenant a la cle a ete deja calcule 
	 * @param a semi Cle
	 * @param b semi Cle
	 * @param c semi Cle
	 * @return Vrai (dans le cas que oui)
	 */
	public boolean isComputed(int a, int b, int c){
		if(a>=(n+n%2)/2)
			a=n-a;
		if(b>=(n+n%2)/2)
			b=n-b;
		if(c>=(n+n%2)/2)
			c=n-c;
		return map.containsKey(a+" "+b+" "+c);
	}
	
}
